#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct{
	int id;
	char name[10];
	float a[10];//a是评委成绩
	float s;//s是总成绩
	float p;//p是平均成绩
}singer;
singer singers [100];
int pp=0;
void inputsingerdata(){
	if(pp>=100){
		printf("选手数量已达上线\n");
		return;
	}
	singer*x=&singers[pp];
	printf("请输入选手编号：");
	scanf("%d",&x->id);
	printf("请输入选手姓名：");
	scanf("%s",x->name);
	pp++;
}
void inputscores(){
	if(pp==0){
		printf("没有选手数据，请先输入选手数据。\n");
		return;
	}
	int id;
	printf("请输入选手编号: ");
	scanf("%d",&id);
	for(int i=0;i<pp;i++){
		if(singers[i].id==id){
			  printf("请输入10个评委的分数：");
			for(int j=0;j<10;j++){
				scanf("%f",&singers[i].a[j]);
			}
			float min = singers[i].a[0];
			float max = singers[i].a[0];
			float s=0.0;
			for(int j=0;j<10;j++){
				if(singers[i].a[j]<min){
					min=singers[i].a[j];
				}
				if(singers[i].a[j]>max){
					max=singers[i].a[j];
				}
				s+=singers[i].a[j];
			}
			singers[i].p=(s-min-max)/8.0;
			singers[i].s=s;
			printf("成绩计算完成。\n");
			return;
		}
	}
	printf("未找到该选手。\n");
}
void sortsingers(){
	if(pp==0){
		printf("没有选手数据，请先输入选手数据。\n");
		return;
	}
	for(int i=0;i<pp-1;i++){
		for(int j=0;j<pp-i-1;j++){
			if(singers[j].p<singers[j+1].p){
				singer t=singers[j];
				singers[j]=singers[j+1];
				singers[j+1]=t;
			}
		}
	}
	printf("选手成绩排序成功。\n");
}
void queryData(){
	if(pp==0){
		printf("没有选手数据，请先输入选手数据。\n");
		return;
	}
	int id;
	printf("请输入选手编号：");
	scanf("%d",&id);
	for(int i=0;i<pp;i++){
		if(id==singers[i].id){
			printf("选手编码：%d\n",singers[i].id);
			printf("选手姓名：%s\n",singers[i].name);
			printf("总成绩：%f\n",singers[i].s);
			printf("平均成绩：%f\n",singers[i].p);
			return;
		}
	}
	printf("未找到该选手。\n");
}
void appendPlayerData(){
	inputsingerdata();
}
void writeToFile(){
	if(pp==0){
		printf("没有选手数据，请先输入选手数据。\n");
		return;
	}
	FILE *file=fopen("singers.txt","w");
	if(file==NULL){
		printf("无法打开文件。\n");
		return;
	}
	for(int i=0;i<pp;i++){
		fprintf(file,"编号：%d,姓名：%s,总成绩：%f,平均成绩:%f\n",singers[i].id,singers[i].name,singers[i].s,singers[i].p);
		
	}
	fclose(file);
	printf("数据以写入文件。\n");
}

void show(){
	printf("\n歌手比赛系统\n");
	printf("1. 输入选手数据\n");
	printf("2. 评委打分\n");
	printf("3. 成绩排序\n");
	printf("4. 数据查询\n");
	printf("5. 追加选手数据\n");
	printf("6. 写入数据文件\n");
	printf("7. 退出系统\n");
	printf("请选择操作: ");
}
int main(){
	int choice;
	while(1){
		show();
		scanf("%d",&choice);
		switch(choice){
	case 1:
		inputsingerdata();
		break;
	case 2:
		inputscores();
		break;
	case 3:
		sortsingers();
		break;
	case 4:
		queryData();
		break;
	case 5:
		appendPlayerData();
		break;
	case 6:
		writeToFile();
		break;
	case 7:
		printf("退出系统。\n");
		exit(0);        
	default:
		printf("无效的选择，请重新选择。\n");
		}
	}
	return 0;
}
